//在一个整数数组中，“峰”是大于或等于相邻整数的元素，相应地，“谷”是小于或等于相邻整数的元素。例如，在数组{5, 8, 4, 2, 3, 4, 6}中，{8
//, 6}是峰， {5, 2}是谷。现在给定一个整数数组，将该数组按峰与谷的交替顺序排序。 
//
// 示例： 
//
// 
//输入：[5, 3, 1, 2, 3]
//输出：[5, 1, 3, 2, 3]
// 
//
// 提示： 
//
// 
// nums.length <= 10000 
// 
//
// Related Topics 贪心 数组 排序 👍 64 👎 0


package LeetCode.editor.cn;

import java.util.Arrays;

/**
 * @author ldltd
 * @date 2025-09-03 23:08:40
 * @description 面试题 10.11.峰与谷
 */
public class PeaksAndValleysLcci{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 PeaksAndValleysLcci fun=new PeaksAndValleysLcci();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
		 // 空間複雜on  时间on
    public void wiggleSort1(int[] nums) {
		int[] ints = Arrays.copyOf(nums, nums.length);
		Arrays.sort(ints);
		int idx=0,l=0,r=nums.length-1;
		while (l<r){
			nums[idx++]=ints[l++];
			nums[idx++]=ints[r--];
		}
		if(l==r) nums[idx]=ints[l];
    }
	//奇数峰值，偶数谷底
	public void wiggleSort(int[] nums) {
		for (int i = 1; i < nums.length; i++) {
			if (i % 2 == 0) {
				// 应该是谷底
				if(nums[i] > nums[i-1]) exch(nums, i, i-1);
			} else {
				// 应该是峰值
				if(nums[i] < nums[i-1]) exch(nums, i, i-1);
			}
		}
	}
	//位运算交换两个数
	void exch(int[] nums, int i, int j){
		nums[i] ^= nums[j];
		nums[j] ^= nums[i];
		nums[i] ^= nums[j];
	}
	// a^a=0 a^b b^(a^b)=b  (a^b)^a=a
	void exch1(int[] nums, int i, int j){
		nums[i] =nums[i]+nums[j];
		nums[j] =nums[i]-nums[j];
		nums[i] =nums[i]-nums[j];
	}

}
//leetcode submit region end(Prohibit modification and deletion)

}
